#coding:utf-8

"""@author WTBF"""


# url 管理器
# 过程：
# 1. 判断待爬取url是否在容器中
# 2. 添加新url到待爬取集合中
# 3. 判断是否还有待爬取的url
# 4. 获取待爬取ur
# 5. 将url从待爬取移动到已爬取 


class UrlManager(object):

    """url 管理器"""

    def __init__(self):
        # 定义新的url列表
        self.new_urls = set()
        # 定义旧的url列表
        self.old_urls = set()

    # 判断传进来的Url是否在已有的URL列表当中
    def add_new_url(self,url):
        # 如果传进来的URL为None,就直接退出
        if url is None:
            return
        # 如果传进来的url不在新的URL列表和不在旧的列表当中就说明它是新的url。就直接添加进新url列表中
        if url not in self.new_urls and url not in self.old_urls:
            self.new_urls.add(url)


    # 添加解析后得到URL进新URL列表中
    def add_new_urls(self,urls):
        # 如果传进来的URL为None或者长度为0，就直接退出
        if urls == None or len(urls) == 0:
            return

        # 如果传进来的URL是正确有效的就直接调用新增URL方法
        for url in urls:
            self.add_new_url(url)


    # 判断url列表中是否有待爬取得url
    def has_new_url(self):
        return len(self.new_urls) != 0



    # 获取url列表中待爬取得url（单个）
    def get_new_url(self):
        # 取出url列表中最后一个url
        new_url = self.new_urls.pop()
        # 把取出来的url放进旧的url中
        self.old_urls.add(new_url)
        # 返回刚才取出的url
        return new_url